//————————制作掩码图——————————
# include <graphics.h>
# include <conio.h>
int main(void)
{
	initgraph(640, 480);
	setbkcolor(YELLOW);
	cleardevice();
	IMAGE img;
	COLORREF c;
	loadimage(&img, L"E://企鹅.jpg");
	DWORD* p = GetImageBuffer(&img);
	c = p[0];
	int w = img.getwidth();
	int h = img.getheight();
	for (int i = 1; i<w*h; i++)
		if (c == p[i])p[i] = WHITE;
		else p[i] = BLACK;
		putimage(0, 0, &img);
		_getch();
		return 0;
}
/* ——————————制作掩码图——————————
#include<graphics.h>
#include<conio.h>
void main()
{
initgraph(640,480);
IMAGE img,img_bk; //定义image
int x,y,cxy,num; //cxy是指定的背景颜色所在的任何一点
int R,G,B,r,g,b;
loadimage(&img,L"E://掩码图.jpg");//图片是单一的背景颜色
loadimage(&img_bk, L"E://Ice.jpg");
putimage(0, 0, &img_bk);
putimage(0,0,&img);
SetWorkingImage();
cxy=getpixel(0,0);//默认背景颜色在这点，也可以通过鼠标函数获取，或者自己修改。
r=GetRValue(cxy);
g=GetGValue(cxy);
b=GetBValue(cxy);
DWORD *pMem=GetImageBuffer(&img);//获取图片的显存指针。
for(y=0;y<img.getheight();y++)//逐个像素点判断
{
for(x=0;x<img.getwidth();x++)
{
num=x+y*img.getwidth();
R=GetRValue(pMem[num]);
G=GetGValue(pMem[num]);
B=GetBValue(pMem[num]);
if(B==r&&R==b&&G==g)//如果图中颜色与背景颜色相同变成白色
pMem[num]=WHITE;
else
pMem[num]=BLACK;//否则变成黑色
}
}
FlushBatchDraw();
putimage(0,0,&img);//还可以通过saveimage保存
_getch();closegraph();
}*/
//——————————实现透明位图——————————
#include <graphics.h>
#include <conio.h>
// 引用该库才能使用 TransparentBlt 函数
#pragma comment( lib, "MSIMG32.LIB")
void main()
{
	// 创建绘图窗口
	initgraph(640, 480);
	// 定义 IMAGE 对象，并加载 c:\test.bmp 图片
	// 要求：该图片大小 80 x 80，用白色表示透明部分
	IMAGE img;
	loadimage(&img, L"E://掩码图.jpg", 80, 80);
	// 获取绘图窗口和 IMAGE 对象的句柄，TransparentBlt 函数需要用
	HDC dstDC = GetImageHDC();
	HDC srcDC = GetImageHDC(&img);
	// 使用 Windows GDI 函数实现透明位图
	TransparentBlt(dstDC, 0, 0, 80, 80, srcDC, 0, 0, 80, 80, 0xffffff); // 最后一个参数是表示透明色为白色
																		// 使 GDI 操作生效
	FlushBatchDraw();
	// 按任意键退出
	_getch();
}